StaffScripts Cerca il mirror più veloce Autore: Riccardo Data: 08/10/2000 Downloads: 2 Voto: 2.5/5 Download Cerca il mirror più veloce Da un'idea di Gigio2K - http://www.gigioland.com" nel NewsGroup it.comp.lang.javascript Capita spesso che lo stesso sito venga pubblicato su più di un server, sia per sfruttare lo spazio ormai infinito che tutte le FreeNet offrono che solo per dare la possibilità al visitatore di fruire più comodamente del proprio sito. Solo che il visitatore non può sapere se uno dei link che gli proponiamo è più veloce di quello che sta visitando o quale fra tutti gli altri è più veloce. Anche perché la "velocità" è soggettiva, e dipende dal suo provider. Però vedere quanto è veloce un server Windows ci mette a disposizione uno strumento: il "Ping" (altri sistemi operativi hanno comunque strumenti analoghi). Il Ping è un pacchetto come tutti quelli che viaggiano su Internet, ma ha una particolarità: ha la precedenza su tutti i pacchetti. Fate conto un'ambulanza che sfreccia nel traffico cittadino! Quanto un router o un server si vede arrivare una richiesta di Ping si congela e risponde immediatamente. Per questo motivo il Ping è alla base degli ormai famosi attacchi DOS (Denial Of Service) come quelli fatti qualche tempo fa a noti provider di informazione americani. Noi non possiamo certo fare un Ping da JavaScript, ma possiamo caricare delle immagini in un documento HTML, questo unito al fatto che l'event-handler "onLoad()" funziona anche per le immagini oltre che per il ci consente di delegare ad uno script la ricerca del server più veloce. Consideriamo la pagina seguente con il suo script:
Looking for the best connection.... please wait.... Cominciamo dal META. La pagina la facciamo spirare il 6 gennaio 1990 (non importa la data, basta che sia nel passato ed abbastanza lontana). Questo ci mette al riparo dalla cache del browser, così né la pagina, né le immagini vengono trattenute dal browser. Nel documento abbiamo tre immagini caricate con tre nomi diversi dai tre server diversi. In realtà l'immagine è la stessa immagine, ma caricata con tre nomi diversi sui tre server. L'importante è che sia la stessa, perché il browser carica (o cerca di caricare, questo lo vediamo dopo) le tre immagini contemporaneamente e comunque una delle tre arriverà prima delle altre. Ogni immagine incorpora l'event-handler "onLoad" con la chiamata alla funzione vai(). Abbiamo dunque creato un meccanismo per cui la prima immagine chiama la funzione. Ora passiamo allo script. Nello script abbiamo un array (ind()) che contiene gli indirizzi del nostro sito sui tre server. Gli stessi indirizzi che metteremmo nella pagina perché il visitatore ne scelga uno, ed una variabile (vai) impostata a true. Cosa succede: appena la prima immagine viene caricata parte la funzione vai() con il parametro (il numero passatogli) che fa riferimento ad un elemento dell'array. La funzione cambia lo stato della variabile vai in modo che il successivo caricamento delle altre immagini non possa più far eseguire il redirect. La riga suggessiva contiene un IF. Se la variabile vai è true viene eseguito un location.replace() all'indirizzo pescato nell'array. Tutto qua. In questo modo saremo certi che il nostro visitatore stia visitando quello quello che per lui, per il suo modem, il suo computer, il suo provider è il nostro mirror più veloce. Prima abbiamo detto "cerca di caricare". Un altro frequentatore del newsgroup (Mimmo) mi ha suggerito a ragione che in questo modo ci cauteliamo da eventuali server down. Infatti in questo modo l'immagine presente su quel server non verrà affatto caricata, e noi saremo sicuri che il nostro visitatore non ci vada. Per provare questo script bisogna prepararlo, uploadarlo ad un indirizzo "relativamente" fisso che useremo come pagina principale d'accesso e provare ad andarci non solo dal nostro computer casalingo, ma anche da quello di qualche nostro amico, dovremmo verificare prima con un ping quale dei server è più veloce, poi vedere se lo script statisticamente funziona. "Statisticamente" è d'obbligo, in quanto la risposta di un server potrebbe non essere identica anche in intervalli di tempo grandi un minuto!. Buon lavoro e... attenti che gli specchi rotti portano 7 anni di guai! :-) http://www.jsdir.com/staffscripts/script026.asp